package com.example.java_gobang.game;

import org.springframework.stereotype.Component;
import org.springframework.web.socket.WebSocketSession;

import java.util.concurrent.ConcurrentHashMap;

@Component
//维护用户的在线状态
//是为了能够在代码中比较方便的获取用户当前的WebSocketh会话，从而通过WebSocket会话给客户端发送消息，同时也能够感知到用户的在线或者离线状态。
public class OnlineUserManager {
    //使用哈希表来表示用户在大厅中的在线状态，并且需要解决线程安全问题，就需要使用ConcurrentHashMap（将每个桶进行加锁，只有当两个请求访问同一个桶才会发生锁竞争）
    private ConcurrentHashMap<Integer, WebSocketSession> gameHall = new ConcurrentHashMap<>();
    //使用哈希表来表示玩家是否在游戏房间当中
    private ConcurrentHashMap<Integer, WebSocketSession> gameRoom = new ConcurrentHashMap<>();

    //登入游戏大厅
    public void enterGameHall(Integer id, WebSocketSession session) {
        gameHall.put(id, session);
    }

    //退出游戏大厅
    public void exitGameHall(Integer id) {
        gameHall.remove(id);
    }

    //获取WebSocketSession
    public WebSocketSession getFromGameHall(Integer id) {
        return gameHall.get(id);
    }

    public void enterGameRoom(Integer id, WebSocketSession session) {
        gameRoom.put(id, session);
    }

    public void exitGameRoom(Integer id) {
        gameRoom.remove(id);
    }

    public WebSocketSession getFromGameRoom(Integer id) {
        return gameRoom.get(id);
    }
}
